import React, { createContext, useEffect, useState, ReactNode } from 'react';
import { IFileSystemService } from '../services/fileSystem/types.ts';
import createFileSystemService from '../services/fileSystem/index.ts';

// 创建上下文
export const FileSystemContext = createContext<IFileSystemService | null>(null);

// 提供者属性接口
interface FileSystemProviderProps {
    children: ReactNode;
    service?: IFileSystemService; // 可选，允许传入自定义服务实例（主要用于测试）
}

/**
 * 文件系统上下文提供者组件
 * 在应用初始化时创建文件系统服务实例，并通过上下文提供给子组件
 */
export const FileSystemProvider: React.FC<FileSystemProviderProps> = ({
    children,
    service
}) => {
    // 使用状态来存储服务实例，允许延迟初始化
    const [fileSystemService, setFileSystemService] = useState<IFileSystemService | null>(null);

    // 在组件挂载时初始化服务
    useEffect(() => {
        const initService = async () => {
            try {
                // 使用提供的服务或创建新的服务
                const serviceInstance = service || createFileSystemService();
                setFileSystemService(serviceInstance);
            } catch (error) {
                console.error('Failed to initialize file system service:', error);
            }
        };

        initService();

        // 清理函数
        return () => {
            // 如果服务实例有需要清理的资源，可以在这里处理
        };
    }, [service]);

    // 等待服务初始化完成
    if (!fileSystemService) {
        return null; // 或返回一个加载指示器
    }

    return (
        <FileSystemContext.Provider value={fileSystemService}>
            {children}
        </FileSystemContext.Provider>
    );
}; 